package cl.portal.escolares.action;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import cl.portal.escolares.DAO.DAOAlumno;
import cl.portal.escolares.DAO.DAOApoderado;
import cl.portal.escolares.DAO.DAOColegio;
import cl.portal.escolares.DAO.DAOFurgon;
import cl.portal.escolares.DAO.DAOPago;
import cl.portal.escolares.DAO.DAOUsuario;
import cl.portal.escolares.domain.Alumno;
import cl.portal.escolares.domain.Apoderado;
import cl.portal.escolares.domain.Colegio;
import cl.portal.escolares.domain.Curso;
import cl.portal.escolares.domain.Furgon;
import cl.portal.escolares.domain.Usuario;
import cl.portal.escolares.sheduler.Constants;

import com.opensymphony.xwork2.ActionSupport;

public class ApoderadoEditAction extends ActionSupport {
	private static final long serialVersionUID = 1L;
	private static Log _log = LogFactory.getLog(ApoderadoEditAction.class);

	private Usuario usuario;
	private Long usuarioId;
	private Apoderado apoderado;
	private Long apoderadoId;

	private List<Alumno> alumnos;
	private Integer pagosPendientes;
	private Integer pagosRealizados;
	private int[] diasPago = Constants.cantidadPagos;
	private int[] cantidadPagos=Constants.cantidadPagos;
	private String okMessage = "";
	private String errorMessage = "";
	private List<Furgon> furgones;
	private List<Colegio>colegios;
	private List<Curso> cursos;
	private HashMap<Long, String> furgonesMap;
	private HashMap<Long, Integer> pagosPendientesMap;
	private HashMap<Long, Integer> pagosRealizadosMap;

	public String execute() throws Exception {
		try {

			if (getApoderadoId() != null && getApoderadoId() > 0) {
				setApoderado(DAOApoderado.get(apoderadoId));
				setAlumnos(DAOAlumno.list(null, apoderado.getApoderadoId(),
						null, null, null, null, null, null, true));
			} else
				setAlumnos(new ArrayList<Alumno>());

			if (getUsuarioId() != null && getUsuarioId() > 0)
				setUsuario(DAOUsuario.get(getUsuarioId()));
			else
				setUsuario(DAOUsuario.get(apoderado.getUsuarioId()));

			 setFurgones(DAOFurgon.list(getUsuarioId(), null, true));;
			 setColegios(DAOColegio.list(true));
			 setCursos(new ArrayList<Curso>());
			furgonesMap = new HashMap<Long, String>();
			for (Furgon f : furgones) {
				furgonesMap.put(f.getFurgonId(), f.getPatente());
			}
			pagosPendientesMap = new HashMap<Long, Integer>();
			pagosRealizadosMap = new HashMap<Long, Integer>();
			for (Alumno a : alumnos) {
				pagosPendientesMap.put(a.getAlumnoId(), (DAOPago.list(
						a.getUsuarioId(), a.getAlumnoId(), a.getApoderadoId(),
						null, null, null, false, null,true)).size());
				pagosRealizadosMap.put(a.getAlumnoId(), (DAOPago.list(
						a.getUsuarioId(), a.getAlumnoId(), a.getApoderadoId(),
						null, null, null, true, null,true)).size());
			}
			// crear metodos para obtener los totales pagados en dinero y
			// cantidad de pagos
			pagosPendientes = 0;
			pagosRealizados = 0;

			setOkMessage("");
			setErrorMessage("");

			return "success";
		} catch (Exception e) {
			_log.error(e);
			setOkMessage("");
			setErrorMessage("");
			addActionError(getText("error.login"));
			return "error";
		}
	}

	public HashMap<Long, Integer> getPagosPendientesMap() {
		return pagosPendientesMap;
	}

	public void setPagosPendientesMap(HashMap<Long, Integer> pagosPendientesMap) {
		this.pagosPendientesMap = pagosPendientesMap;
	}

	public HashMap<Long, Integer> getPagosRealizadosMap() {
		return pagosRealizadosMap;
	}

	public void setPagosRealizadosMap(HashMap<Long, Integer> pagosRealizadosMap) {
		this.pagosRealizadosMap = pagosRealizadosMap;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public static Log get_log() {
		return _log;
	}

	public static void set_log(Log _log) {
		ApoderadoEditAction._log = _log;
	}

	public List<Furgon> getFurgones() {
		return furgones;
	}

	public void setFurgones(List<Furgon> furgones) {
		this.furgones = furgones;
	}

	public HashMap<Long, String> getFurgonesMap() {
		return furgonesMap;
	}

	public void setFurgonesMap(HashMap<Long, String> furgonesMap) {
		this.furgonesMap = furgonesMap;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	public Apoderado getApoderado() {
		return apoderado;
	}

	public void setApoderado(Apoderado apoderado) {
		this.apoderado = apoderado;
	}

	public Long getApoderadoId() {
		return apoderadoId;
	}

	public void setApoderadoId(Long apoderadoId) {
		this.apoderadoId = apoderadoId;
	}

	public Integer getPagosPendientes() {
		return pagosPendientes;
	}

	public void setPagosPendientes(Integer pagosPendientes) {
		this.pagosPendientes = pagosPendientes;
	}

	public Integer getPagosRealizados() {
		return pagosRealizados;
	}

	public void setPagosRealizados(Integer pagosRealizados) {
		this.pagosRealizados = pagosRealizados;
	}

	public int[] getDiasPago() {
		return diasPago;
	}

	public void setDiasPago(int[] diasPago) {
		this.diasPago = diasPago;
	}

	public Long getUsuarioId() {
		return usuarioId;
	}

	public void setUsuarioId(Long usuarioId) {
		this.usuarioId = usuarioId;
	}

	public List<Alumno> getAlumnos() {
		return alumnos;
	}

	public void setAlumnos(List<Alumno> alumnos) {
		this.alumnos = alumnos;
	}

	public String getOkMessage() {
		return okMessage;
	}

	public void setOkMessage(String okMessage) {
		this.okMessage = okMessage;
	}

	public String getErrorMessage() {
		return errorMessage;
	}

	public void setErrorMessage(String errorMessage) {
		this.errorMessage = errorMessage;
	}

	public List<Colegio> getColegios() {
		return colegios;
	}

	public void setColegios(List<Colegio> colegios) {
		this.colegios = colegios;
	}

	public List<Curso> getCursos() {
		return cursos;
	}

	public void setCursos(List<Curso> cursos) {
		this.cursos = cursos;
	}

	public int[] getCantidadPagos() {
		return cantidadPagos;
	}

	public void setCantidadPagos(int[] cantidadPagos) {
		this.cantidadPagos = cantidadPagos;
	}

}
